<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of SiageCommand
 *
 * @author thales
 */
class SiageCommand {
    public function execute(RequestController $request, ResponseController $response) {
        
        $this->defaultLoad($request, $response);
        
        switch ( strtolower($request->getParam('acao')) ) {
            case 'login'	:
                $this->defaultLoad($request, $response);
                break;

            case 'pesquisaraba' :
                $this->getAllDestinos($request, $response);
                $this->getAllPagamentos($request, $response);
                $this->getAllOperacao($request, $response);
                $this->buscarPerfil($request, $response);
                $this->getClientes($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', $request->getParam('conteudo').'.php');
                break;

            case 'cadastrarusuario' :
                $this->cadastroUsuario($request, $response);
                $this->buscarPerfil($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarUsuario.php');
                break;
            
            case 'cadastrarcliente' :
                $this->cadastroCliente($request, $response);
                $this->buscarPerfil($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarCliente.php');
                break;
            
            case 'cadastrartipooperacao' :
                $this->cadastroTipoOperacao($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarTipoOperacao.php');
                break;
            
            case 'cadastrartipopagamento' :
                $this->cadastroTipoPagamento($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarTipoPagamento.php');
                break;
            
            case 'cadastrartipooperacao' :
                $this->cadastroTipoOperacao($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarTipoOperacao.php');
                break;
            
            case 'cadastrardestino' :
                $this->cadastroDestino($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarDestino.php');
                break;
            
            case 'cadastrarbilhete' :
                $this->getAllDestinos($request, $response);
                $this->getAllPagamentos($request, $response);
                $this->getAllOperacao($request, $response);
                $this->buscarPerfil($request, $response);
                $this->getClientes($request, $response);
                $this->cadastroBilhete($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarBilhete.php');
                break;
            
            case 'cadastrartipocusto':
                $this->cadastrarTipoCusto($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'cadastrarTipoCusto.php');
                break;
            
            case 'logout':
                $this->logout($request, $response);
                $request->setAttribute('viewIndex', 'login.php');
                break;
            
            case 'pesquisarusuario' :
                $this->pesquisarUsuario($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarUsuario.php');
                break;
            
            case 'pesquisarcliente' :
                $this->pesquisarCliente($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarCliente.php');
                break;
            
            case 'pesquisartipooperacao' :
                $this->pesquisarTipoOperacao($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarTipoOperacao.php');
                break;
            
            case 'pesquisartipopagamento' :
                $this->pesquisarTipoPagamento($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarTipoPagamento.php');
                break;
            
            case 'pesquisardestino' :
                $this->pesquisarDestino($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarDestino.php');
                break;
            
            case 'pesquisarbilhete' :
                $this->pesquisarBilhete($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarBilhete.php');
                break;
            
            case 'atualizarusuario' :
                $this->buscarPerfil($request, $response);
                $this->atualizarUsuario($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'atualizarUsuario.php');
                break;
            
            case 'atualizarcliente' :
                $this->atualizarCliente($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'atualizarCliente.php');
                break;
            
            case 'atualizartipooperacao' :
                $this->atualizarTipoOperacao($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'atualizarTipoOperacao.php');
                break;
            
            case 'atualizartipopagamento' :
                $this->atualizarTipoPagamento($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'atualizarTipoPagamento.php');
                break;
            
            case 'atualizarbilhete' :
                $this->getAllDestinos($request, $response);
                $this->getAllPagamentos($request, $response);
                $this->getAllOperacao($request, $response);
                $this->getClientes($request, $response);
                $this->atualizarBilhete($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'atualizarBilhete.php');
                break;
            
            case 'atualizartipocusto':
                $this->atualizarTipoCusto($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'atualizarTipoCusto.php');
                break;
            
            case 'atualizardestino' :
                $this->atualizarDestino($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'atualizarDestino.php');
                break;
            
            case 'excluirusuario' :
                $this->excluirUsuario($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarUsuario.php');
                break;
            
            case 'excluircliente' :
                $this->excluirCliente($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarCliente.php');
                break;
            
            case 'excluirtipooperacao' :
                $this->excluirTipoOperacao($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarTipoOperacao.php');
                break;
            
             case 'excluirtipopagamento' :
                $this->excluirTipoPagamento($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarTipoPagamento.php');
                break;
            
            case 'excluirdestino' :
                $this->excluirDestino($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarDestino.php');
                break;
            
            case 'excluirbilhete' :
                $this->excluirBilhete($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarBilhete.php');
                break;
            
            case 'pesquisartipocusto':
                $this->pesquisarTipoCusto($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarTipoCusto.php');
                break;
            
            case 'excluirtipocusto':
                $this->excluirTipoCusto($request, $response);
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'pesquisarTipoCusto.php');
                break;
            
            case 'relatoriocusto':
                $this->relatorioCusto($request, $response);
                die();
                break;
            
            default:
                $this->defaultLoad($request, $response);
                break;
        }

        $request->setAttribute('view', 'index.php');
        $response->forward($request, $response);
          
    }
    
    /**
     *Método default que carrega as informações necessárias em todo o momento da aplicação.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function defaultLoad(RequestController $request, ResponseController $response) {

        $funcionario = !is_null( $request->getAppSession('funcionario') ) ? $request->getAppSession('funcionario') : new LoginBO();

        if ( !$funcionario->isLogado() && strtolower($request->getParam('acao')) != 'login' && strtolower($request->getParam('acao')) != '') {
            $msg['status'] = 'erro';
            $msg['mensagem'] = 'Você precisa esta logado para acessar!';
            $request->setAttribute('msgUsuario', $msg);
            $request->setAttribute('view', 'index.php');
            $request->setAttribute('viewIndex', 'login.php');
            $response->forward($request, $response);
        }else if(!$funcionario->isLogado() && strtolower($request->getParam('acao')) == ''){
            $request->setAttribute('view', 'index.php');
            $request->setAttribute('viewIndex', 'login.php');
            $response->forward($request, $response);
        }else{
            $request->setAttribute('view', 'index.php');
            $request->setAttribute('viewIndex', 'inicio.php');
            $request->setAttribute('viewConteudo', 'conteudoInicio.php');
        }

        if ( strtolower($request->getParam('acao')) == 'login' ) {           
            if (!$funcionario->isLogado()) {
                $this->login($request, $response);
                $logado = $request->getAppSession('funcionario');
                if ( $logado == true) {
                    $request->setAttribute('view', 'index.php');
                    $request->setAttribute('viewIndex', 'inicio.php');
                    $request->setAttribute('viewConteudo', 'conteudoInicio.php');
                }else{
                    
                    $request->setAttribute('view', 'index.php');
                    $request->setAttribute('viewIndex', 'login.php');
                    $response->forward($request, $response);
                }
            }else{
                $request->setAttribute('view', 'index.php');
                $request->setAttribute('viewIndex', 'inicio.php');
                $request->setAttribute('viewConteudo', 'conteudoInicio.php');
            }
        }
        // ---  seta a mensagem de erro ---
        if ( $request->getAttribute('msgUsuario') ) {
            $request->setAttribute('view', 'index.php');
            $response->forward($request, $response);
        }
    }

    /**
     * Tarefa responsável por efetuar o login do usuário.
     * 
     * <b>Paramêtros e requisição:</b><br>
     * usuario String<br>
     * senha String<br>
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array (somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function login(RequestController $request, ResponseController $response) {
        $email = trim( $request->getParam('email') );
        $senha = trim( $request->getParam('senha') );
        try{
            $objLoginBO = new LoginBO();
            $objLoginBO->efetuarLogin($email, $senha);
            
            $request->setAppSession('funcionario', $objLoginBO);

        }  catch ( UserException $e ){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }

     /**
     * Tarefa responsável por efetuar o logout do usuário no sstema.
     *
     * <b>Paramêtros e requisição:</b><br>
     * 
     * <b>Resposta:</b><br>
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function logout(RequestController $request, ResponseController $response) {
            $session = $request->getSession();
            $session->unsetAttribute('funcionario');
            $session->clear();
    }
    
    /**
     * Tarefa responsável por trazer todos os clientes
     * 
     * <b>Resposta:</b><br>
     * listaObjCliente Array 
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function getClientes(RequestController $request, ResponseController $response){
        try{
            $objClienteBO = new ClienteBO();
            $request->setAttribute('listaClientes', $objClienteBO->getAllClientes());
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por selcionar todos os destinos.
     * 
     * <b>Paramêtros e requisição:</b><br>
     * 
     * <b>Resposta:</b><br>
     * $objDestinoBO
     * msgUsuario array (somente em caso de erro) 
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function getAllDestinos(RequestController $request, ResponseController $response){
        try {
            $objDestinoBO = VendasBO::pegarTodosDestinos();
            $request->setAttribute('objDestinoBO', $objDestinoBO);
        } catch(UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
    }
    
    /**
     * Tarefa responsável por selcionar todos os tipos de pagamento.
     * 
     * <b>Paramêtros e requisição:</b><br>
     * 
     * <b>Resposta:</b><br>
     * $objPagamentoBO
     * msgUsuario array (somente em caso de erro) 
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function getAllPagamentos(RequestController $request, ResponseController $response){
        try {
            $objPagamentoBO = VendasBO::pegarTodosPagamentos();
            $request->setAttribute('objPagamentoBO', $objPagamentoBO);
        } catch(UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
    }
    
    /**
     * Tarefa responsável por selcionar todos os tipos de operações
     * 
     * <b>Paramêtros e requisição:</b><br>
     * 
     * <b>Resposta:</b><br>
     * $objOperacaoBO
     * msgUsuario array (somente em caso de erro) 
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function getAllOperacao(RequestController $request, ResponseController $response){
        try {
            $objOperacaoBO = VendasBO::pegarTodosOperacao();
            $request->setAttribute('objOperacaoBO', $objOperacaoBO);
        } catch(UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
    }
    
    /**
     * Tarefa responsável por cadastrar um bilhete
     * 
     * <b>Paramêtros e requisição:</b><br>
     * 
     * localizador (inteter)
     * data_emissao (date)
     * cia_aerea (String)
     * dt_ida (date)
     * dt_volta (date)
     * num_bilhete (integer)
     * tx_embarque (float)
     * val_pagar (float)
     * val_receber (float)
     * val_multa_pontos (float)
     * val_multa_moeda (float)
     * meta_domestica (float)
     * percent_domestico (float)
     * cliente_id (integer)
     * tipo_pagamento_id (integer)
     * tipo_operacao_id (integer)
     * origem (integer)
     * destino (integer)
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function cadastroBilhete(RequestController $request, ResponseController $response) {
        $localizador       = trim($request->getParam('localizador'));
        $data_emissao      = trim($request->getParam('data_emissao'));
        $cia_aerea         = trim($request->getParam('cia_aerea'));
        $dt_ida            = trim($request->getParam('dt_ida'));
        $dt_volta          = trim($request->getParam('dt_volta'));
        $num_bilhete       = trim($request->getParam('num_bilhete'));
        $val_du            = trim($request->getParam('val_du'));
        $tx_embarque       = trim($request->getParam('tx_embarque'));
        $val_pagar         = trim($request->getParam('val_pagar'));
        $val_receber       = trim($request->getParam('val_receber'));
        $val_multa_pontos  = trim($request->getParam('val_multa_pontos'));
        $val_multa_moeda   = trim($request->getParam('val_multa_moeda'));
        $meta_domestica    = trim($request->getParam('meta_domestica'));
        $percent_domestico = trim($request->getParam('percent_domestico'));
        $cliente_id        = trim($request->getParam('idCliente'));
        $tipo_pagamento_id = trim($request->getParam('tipo_pagamento_id'));
        $tipo_operacao_id  = trim($request->getParam('tipo_operacao_id'));
        $origem            = trim($request->getParam('origem'));
        $destino           = trim($request->getParam('destino'));
        
        try {
            $objBilheteBO = new VendasBO();
            $objBilheteBO->salvarBilhete($localizador,$data_emissao,$cia_aerea,$dt_ida,$dt_volta,
                                         $num_bilhete,$val_du,$tx_embarque,$val_pagar,$val_receber,
                                         $val_multa_pontos,$val_multa_moeda,$meta_domestica,
                                         $percent_domestico,$cliente_id,$tipo_pagamento_id,
                                         $tipo_operacao_id,$origem,$destino);
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Bilhete cadastrado com sucesso!';
            
        } catch (UserException $e){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
        $request->setAttribute('msgUsuario', $msg);

    }
    
    /**
     * Tarefa responsável por preencher o combo de perfil
     * 
     * <b>Resposta:</b><br>
     * listaPerfil Array:objPerfil
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function buscarPerfil(RequestController $request, ResponseController $response) {
        try{
            $objPerfilDAO = new PerfilDAO();
            $request->setAttribute('listaPerfil', $objPerfilDAO->selecionarPerfil());

        }  catch ( UserException $e ){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }

    }

    /**
     * Tarefa responsável por cadastrar um novo usuário.
     *
     * <b>Paramêtros e requisição:</b><br>
     * nome string<br>
     * email string<br>
     * senha string<br>
     * perfil integer
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array em caso de erro ou sucesso.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function cadastroUsuario(RequestController $request, ResponseController $response) {
        $nome   = trim($request->getParam('nome'));
        $email  = trim($request->getParam('email'));
        $senha  = trim($request->getParam('senha'));
        $perfilId = trim($request->getParam('perfil'));
        
        try {
            $objUsuarioBO = new UsuarioBO();
            $objUsuarioBO->salvarUsuario($nome, $email, $senha, $perfilId);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Usuário cadastrado com sucesso!';
            
        } catch (UserException $e){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
        $request->setAttribute('msgUsuario', $msg);

    }
    
    /**
     * Tarefa responsável por cadastrar um cliente.
     * 
     * <b>Paramêtros e requisição:</b><br>
     * 
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function cadastroCliente(RequestController $request, ResponseController $response) {
        $nome         = trim($request->getParam('nome'));
        $email        = trim($request->getParam('email'));
        $telefone     = trim($request->getParam('telefone'));
        $celular      = trim($request->getParam('celular'));
        $cidade       = trim($request->getParam('cidade'));
        $bairro       = trim($request->getParam('bairro'));
        $uf           = trim($request->getParam('uf'));
        $cep          = trim($request->getParam('cep'));
        $complemento  = trim($request->getParam('complemento'));
        $nascimento   = trim($request->getParam('nascimento'));
        $genero       = trim($request->getParam('genero'));
        
        try {
            $objClienteBO = new ClienteBO();
            $objClienteBO->salvarCliente($nome, $email, $telefone, $celular, $cidade,
                                            $bairro, $uf, $cep, $complemento, $nascimento, $genero);
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Cliente cadastrado com sucesso!';
            
        } catch (UserException $e){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
        $request->setAttribute('msgUsuario', $msg);

    }
    
    /**
     * Tarefa responsável por cadastrar um tipo de operação
     * <b>Paramêtros e requisição:</b><br>
     *
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function cadastroTipoOperacao(RequestController $request, ResponseController $response) {
        $descricao = trim($request->getParam('descricao'));
        
        try {
            $objTipoOperacaoBO = new VendasBO();
            $objTipoOperacaoBO->salvarTipoOperacao($descricao);
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Tipo de operação cadastrada com sucesso!';
            
        } catch (UserException $e){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
        $request->setAttribute('msgUsuario', $msg);

    }
    
    /**
     * Tarefa responsável por cadastrar um tipo de pagamento
     * <b>Paramêtros e requisição:</b><br>
     * 
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function cadastroTipoPagamento(RequestController $request, ResponseController $response) {
        $descricao = trim($request->getParam('descricao'));
        
        try {
            $objTipoPagamentoBO = new VendasBO();
            $objTipoPagamentoBO->salvarTipoPagamento($descricao);
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Tipo de pagamento cadastrado com sucesso!';
            
        } catch (UserException $e){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
        $request->setAttribute('msgUsuario', $msg);

    }
    
    /**
     * Tarefa responsável por cadastrar os tipos de custos. <br>
     * 
     * Paramêtros e requisição:</b><br>
     * descricao String
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array (somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function cadastrarTipoCusto(RequestController $request, ResponseController $response){
         $descricao = trim($request->getParam('descricao'));
        
        try{

            $objCustoBO = new CustoBO();
            $objCustoBO->cadastarTipoDeCusto($descricao);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Tipo de custo cadastrado com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por cadasdrar um destino
     * 
     * <b>Paramêtros e requisição:</b><br>
     * 
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function cadastroDestino(RequestController $request, ResponseController $response) {
        $descricao = trim($request->getParam('descricao'));

        try {
            $objDestinoBO = new VendasBO();
            $objDestinoBO->salvarDestino($descricao);
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Destino cadastrado com sucesso!';
            
        } catch (UserException $e){
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
        }
        
        $request->setAttribute('msgUsuario', $msg);

    }
    
    /**
     * Tarefa responsável porpesquisar os dados do usuário cadastrado.
     *
     * <b>Paramêtros e requisição:</b><br>
     * nome string<br>
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array em caso de erro.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function pesquisarUsuario(RequestController $request, ResponseController $response) {
        $nome = trim($request->getParam('nome'));
        
        try{
            
            
            $listaObjUsuarioBO = UsuarioBO::pegarDadosPeloNome($nome);
            
            $request->setAttribute('listaObjUsuarioBO', $listaObjUsuarioBO);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por pesquisar um tipo de pagamento
     * <b>Paramêtros e requisição:</b><br>
     * descricao (String)
     * 
     * <b>Resposta:</b><br>
     * listaObjTipoPagamentoBO Array:objeto
     * msgUsuario array(somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function pesquisarTipoPagamento(RequestController $request, ResponseController $response) {
        $descricao = trim($request->getParam('descricao'));
        
        try{
            
            $listaObjTipoPagamentoBO = VendasBO::pegarDadosPelaDescricaoPagamento($descricao);
            
            $request->setAttribute('listaObjTipoPagamentoBO', $listaObjTipoPagamentoBO);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por pesquisar um tipo de operação
     * <b>Paramêtros e requisição:</b><br>
     * descricao (String)
     * 
     * <b>Resposta:</b><br>
     * listaObjTipoOperacaoBO Array:objeto
     * msgUsuario array(somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function pesquisarTipoOperacao(RequestController $request, ResponseController $response) {
        $descricao = trim($request->getParam('descricao'));
        
        try{
            
            $listaObjTipoOperacaoBO = VendasBO::pegarDadosPelaDescricao($descricao);
            
            $request->setAttribute('listaObjTipoOperacaoBO', $listaObjTipoOperacaoBO);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por pesquisar um cliente.
     * <b>Paramêtros e requisição:</b><br>
     * nome (String)
     * 
     * <b>Resposta:</b><br>
     * listaObjClienteBO Array:objeto
     * msgUsuario array(somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function pesquisarCliente(RequestController $request, ResponseController $response) {
        $nome = trim($request->getParam('nome'));
        
        try{
            
            
            $listaObjClienteBO = ClienteBO::pegarDadosPeloNome($nome);
            
            $request->setAttribute('listaObjClienteBO', $listaObjClienteBO);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por pesquisar um bilhete.
     * <b>Paramêtros e requisição:</b><br>
     * localizadr (String)
     * 
     * <b>Resposta:</b><br>
     * listaObjBilheteBO Array:objeto
     * msgUsuario array(somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function pesquisarBilhete(RequestController $request, ResponseController $response) {
        $localizador = trim($request->getParam('localizador'));
        
        try{
            
            $listaObjBilheteBO = VendasBO::pegarDadosPelaDescricaoBilhete($localizador);
            
            $request->setAttribute('listaObjBilheteBO', $listaObjBilheteBO);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por pesquisar um destino.
     * <b>Paramêtros e requisição:</b><br>
     * descricao (String)
     * 
     * <b>Resposta:</b><br>
     * listaObjDestinoBO Array:objeto
     * msgUsuario array(somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function pesquisarDestino(RequestController $request, ResponseController $response) {
        $descricao = trim($request->getParam('descricao'));
        
        try{
            
            
            $listaObjDestinoBO = VendasBO::pegarDadosPelaDescricaoDestino($descricao);
            
            $request->setAttribute('listaObjDestinoBO', $listaObjDestinoBO);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    
    /**
     * Tarefa responsável por pesquisar os tipos de custos cadastrados. <br>
     * 
     * Paramêtros e requisição:</b><br>
     * descricao String
     * 
     * <b>Resposta:</b><br>
     * listaObjTipoCusto Array
     * msgUsuario array (somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function pesquisarTipoCusto(RequestController $request, ResponseController $response){
         $descricao = trim($request->getParam('descricao'));
        
        try{

            $listaObjTipoCustoVO = CustoBO::pegarDadosTipoCusto($descricao);
            
            $request->setAttribute('listaObjTipoCustoVO', $listaObjTipoCustoVO);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável atualizar os dados do usuário cadastrado.
     *
     * <b>Paramêtros e requisição:</b><br>
     * idUsuario integer<br>
     * nome string<br>
     * email string<br>
     * senha string<br>
     * senhaAutorizacao String<br>
     * perfil integer
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array em caso de erro ou sucesso.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function atualizarUsuario(RequestController $request, ResponseController $response) {
        $idUsuario = trim($request->getParam('id'));
       
        try{
            if ( $request->getParam('pesquisar') ) {
                $objUsuarioBO = UsuarioBO::pegarDados($idUsuario);
                $request->setAttribute('objUsuarioBO', $objUsuarioBO);
     
                return true;
            }
            $nome   = trim($request->getParam('nome'));
            $email  = trim($request->getParam('email'));
            $senha  = trim($request->getParam('senha'));
            $perfilId = trim($request->getParam('perfil'));

            $idAdministrador = $request->getAppSession('funcionario')->getUsuario()->getId();
            $senhaAutorizacao = trim($request->getParam('senhaAutorizacao'));   

            $objLoginBO  = new LoginBO();
            $objLoginBO->validarAutorizacaoUsuario($idAdministrador, $senhaAutorizacao);


            $objUsuarioBO = new UsuarioBO();
            $objUsuarioBO->atualizarUsuario($idUsuario, $nome, $email, $senha, $perfilId);

            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Dados do usuário alterado com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por atualizar um tipo de operação
     * 
     * 
     * @param RequestController $request
     * @param ResponseController $response
     * @return type 
     */
    private function atualizarTipoOperacao(RequestController $request, ResponseController $response) {
        $idDescricao = trim($request->getParam('id'));
       
        try{
            if ( $request->getParam('pesquisar') ) {
                $objTipoOperacaoBO = VendasBO::pegarDados($idDescricao);
                $request->setAttribute('objTipoOperacaoBO', $objTipoOperacaoBO);
     
                return true;
            }
            
            $descricao = trim($request->getParam('descricao'));

            $objTipoOperacaoBO = new VendasBO();
            $objTipoOperacaoBO->atualizarTipoOperacao($idDescricao, $descricao);

            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Dados do tipo de operação alterados com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por atualizar um cliente.
     *  
     * @param RequestController $request
     * @param ResponseController $response
     * @return type 
     */
    private function atualizarCliente(RequestController $request, ResponseController $response) {
        $idCliente = trim($request->getParam('id'));
        
        try{
            if ( $request->getParam('pesquisar') ) {
                $objClienteBO = ClienteBO::pegarDados($idCliente);
                $request->setAttribute('objClienteBO', $objClienteBO);
     
                return true;
            }
            
            $nome        = trim($request->getParam('nome'));
            $email       = trim($request->getParam('email'));
            $telefone    = trim($request->getParam('telefone'));
            $celular     = trim($request->getParam('celular'));
            $cidade      = trim($request->getParam('cidade'));
            $bairro      = trim($request->getParam('bairro'));
            $uf          = trim($request->getParam('uf'));
            $cep         = trim($request->getParam('cep'));
            $complemento = trim($request->getParam('complemento'));
            $nascimento  = trim($request->getParam('nascimento'));
            $genero      = trim($request->getParam('genero'));

            $objClienteBO = new ClienteBO();
            $objClienteBO->atualizarCliente($idCliente, $nome, $email, $telefone, $celular, $cidade, $bairro,
                                            $uf, $cep, $complemento, $nascimento, $genero);

            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Dados do cliente alterados com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Terefa responsável por atualizar um bilhete
     * 
     * @param RequestController $request
     * @param ResponseController $response
     * @return type 
     */
    private function atualizarBilhete(RequestController $request, ResponseController $response) {
        $idBilhete = trim($request->getParam('id'));
        
        try{
            if ( $request->getParam('pesquisar') ) {
                $objBilheteBO = VendasBO::pegarDadosBilhete($idBilhete);
                $request->setAttribute('objBilheteBO', $objBilheteBO);
     
                return true;
            }
            
            $localizador       = trim($request->getParam('localizador'));
            $data_emissao      = trim($request->getParam('data_emissao'));
            $cia_aerea         = trim($request->getParam('cia_aerea'));
            $dt_ida            = trim($request->getParam('dt_ida'));
            $dt_volta          = trim($request->getParam('dt_volta'));
            $num_bilhete       = trim($request->getParam('num_bilhete'));
            $val_du            = trim($request->getParam('val_du'));
            $tx_embarque       = trim($request->getParam('tx_embarque'));
            $val_pagar         = trim($request->getParam('val_pagar'));
            $val_receber       = trim($request->getParam('val_receber'));
            $val_multa_pontos  = trim($request->getParam('val_multa_pontos'));
            $val_multa_moeda   = trim($request->getParam('val_multa_moeda'));
            $meta_domestica    = trim($request->getParam('meta_domestica'));
            $percent_domestico = trim($request->getParam('percent_domestico'));
            $cliente_id        = trim($request->getParam('idCliente'));
            $tipo_pagamento_id = trim($request->getParam('tipo_pagamento_id'));
            $tipo_operacao_id  = trim($request->getParam('tipo_operacao_id'));
            $origem            = trim($request->getParam('origem'));
            $destino           = trim($request->getParam('destino'));

            $objBilheteBO = new VendasBO();
            $objBilheteBO->atualizarBilhete($idBilhete,$localizador,$data_emissao,$cia_aerea,$dt_ida,$dt_volta,
                                            $num_bilhete,$val_du,$tx_embarque,$val_pagar,$val_receber,
                                            $val_multa_pontos,$val_multa_moeda,$meta_domestica,
                                            $percent_domestico,$cliente_id,$tipo_pagamento_id,
                                            $tipo_operacao_id,$origem,$destino);

            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Dados do bilhete alterados com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por atualizar um tipo de pagamento 
     * 
     * @param RequestController $request
     * @param ResponseController $response
     * @return type 
     */
    private function atualizarTipoPagamento(RequestController $request, ResponseController $response) {
        $idDescricao = trim($request->getParam('id'));
       
        try{
            if ( $request->getParam('pesquisar') ) {
                $objTipoPagamentoBO = VendasBO::pegarDadosPagamento($idDescricao);
                $request->setAttribute('objTipoPagamentoBO', $objTipoPagamentoBO);
     
                return true;
            }
            
            $descricao = trim($request->getParam('descricao'));

            $objTipoPagamentoBO = new VendasBO();
            $objTipoPagamentoBO->atualizarTipoPagamento($idDescricao, $descricao);

            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Dados do tipo de pagamento alterados com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por atualizar um destino.
     * 
     * @param RequestController $request
     * @param ResponseController $response
     * @return type 
     */
    private function atualizarDestino(RequestController $request, ResponseController $response) {
        $idDescricao = trim($request->getParam('id'));
       
        try{
            if ( $request->getParam('pesquisar') ) {
                $objDestinoBO = VendasBO::pegarDadosDestino($idDescricao);
                $request->setAttribute('objDestinoBO', $objDestinoBO);
     
                return true;
            }
            
            $descricao = trim($request->getParam('descricao'));

            $objDestinoBO = new VendasBO();
            $objDestinoBO->atualizarDestino($idDescricao, $descricao);

            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Dados do destino alterados com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por atualizar um tipo de custo
     * 
     * Paramêtros e requisição:</b><br>
     * descricao String
     * 
     * <b>Resposta:</b><br>
     * objTipoCusto
     * msgUsuario array (somente em caso de erro)
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function atualizarTipoCusto(RequestController $request, ResponseController $response){
        $id = trim($request->getParam('id')); 
        try{
             if ( $request->getParam('pesquisar') ) {
                $objTipoCusto = CustoBO::pegarDadoTipoCusto($id);
                $request->setAttribute('objTipoCusto', $objTipoCusto);
     
                return true;
            }

            $descricao = trim($request->getParam('descricao'));

            $objCustoBO = new CustoBO();
            $objCustoBO->alterarTipoCusto($id, $descricao);

            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Dados do tipo de custo alterado com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por excluir um usuário do sistema.
     *
     * <b>Paramêtros e requisição:</b><br>
     * id integer<br>
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array em caso de erro ou sucesso.<br>
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function excluirUsuario(RequestController $request, ResponseController $response) {
        $id = $request->getParam('id');
        try{
            
            $objUsuarioBO = new UsuarioBO();
            $objUsuarioBO->excluirUsuario($id);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Usuário excluído com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch ( UserException $e ) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    
    /**
     * Tarefa responsável por excluir um cliente.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function excluirCliente(RequestController $request, ResponseController $response) {
        $id = $request->getParam('id');
        try{
            
            $objClienteBO = new ClienteBO();
            $objClienteBO->excluirCliente($id);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Cliente excluído com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch ( UserException $e ) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por excluir um tipo de operação.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function excluirTipoOperacao(RequestController $request, ResponseController $response) {
        $id = $request->getParam('id');
        try{
            
            $objTipoOperacaoBO = new VendasBO();
            $objTipoOperacaoBO->excluirTipoOperacao($id);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Tipo de operação excluída com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch ( UserException $e ) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por excluir um tipo de pagamento.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function excluirTipoPagamento(RequestController $request, ResponseController $response) {
        $id = $request->getParam('id');
        try{
            
            $objTipoPagamentoBO = new VendasBO();
            $objTipoPagamentoBO->excluirTipoPagamento($id);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Tipo de pagamento excluído com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch ( UserException $e ) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Taarefa responsável por excluirum destino.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function excluirDestino(RequestController $request, ResponseController $response) {
        $id = $request->getParam('id');
        try{
            
            $objDestinoBO = new VendasBO();
            $objDestinoBO->excluirDestino($id);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Destino excluído com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch ( UserException $e ) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por excluir um bilhete.
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function excluirBilhete(RequestController $request, ResponseController $response) {
        $id = $request->getParam('id');
        try{
            
            $objBilheteBO = new VendasBO();
            $objBilheteBO->excluirBilhete($id);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'Bilhete excluído com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
            
        }  catch ( UserException $e ) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    /**
     * Tarefa responsável por excluir um tipo de custo
     * 
     * Paramêtros e requisição:</b><br>
     * id integer
     * 
     * <b>Resposta:</b><br>
     * msgUsuario array 
     * 
     * @param RequestController $request
     * @param ResponseController $response 
     */
    private function excluirTipoCusto(RequestController $request, ResponseController $response){
        $id = trim($request->getParam('id')); 
        try{
            $objClienteBO = new ClienteBO();
            $objClienteBO->excluirCliente($id);
            
            $msg['status'] = 'sucesso';
            $msg['mensagem'] = 'tipo de custo excluído com sucesso!';
            $request->setAttribute('msgUsuario', $msg);
        }  catch (UserException $e) {
            $msg['status'] = 'erro';
            $msg['mensagem'] = $e->getMessage();
            $request->setAttribute('msgUsuario', $msg);
        }
    }
    
    private function relatorioCusto(RequestController $request, ResponseController $response){
        $gerarPDF = new GerarPDF('funfa', 'relatorioCusto');
        $gerarPDF->getPDF();
    }
}

?>
